package org.mytools.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串操作辅助类
 * 
 * @author Jacky.L
 * 
 */
public class StringUtils {

	/**
	 * 字符串首字母大写
	 * 
	 * @param str
	 *            字符串参数
	 * @return 首字母大写的字符串
	 */
	public static String firstLetterUpper(String str) {
		char[] chars = str.toCharArray();

		StringBuffer newstr = new StringBuffer();
		for (int i = 0; i < chars.length; i++) {
			if (0 == i) {
				newstr.append(String.valueOf(chars[i]).toUpperCase());
			} else {
				newstr.append(String.valueOf(chars[i]));
			}
		}

		return newstr.toString();
	}

	/**
	 * 字符串首字母小写
	 * 
	 * @param str
	 *            字符串参数
	 * @return 首字母小写的字符串
	 */
	public static String firstLetterLower(String str) {
		char[] chars = str.toCharArray();

		StringBuffer newstr = new StringBuffer();
		for (int i = 0; i < chars.length; i++) {
			if (0 == i) {
				newstr.append(String.valueOf(chars[i]).toLowerCase());
			} else {
				newstr.append(String.valueOf(chars[i]));
			}
		}

		return newstr.toString();
	}

	/**
	 * 根据给定正则表达式的匹配拆分此字符串到一个字符串List列表
	 * 
	 * @param str
	 *            字符串参数
	 * @param regex
	 *            定界正则表达式
	 * @return 字符串List列表
	 */
	public static List<String> splitToList(String str, String regex) {
		String[] strarry = str.split(regex);

		List<String> strlist = new ArrayList<String>();
		for (String s : strarry) {
			strlist.add(s);
		}

		return strlist;
	}

	/**
	 * 根据给定正则表达式的匹配拆分此字符串到一个字符串Map集合
	 * 
	 * @param str
	 *            字符串参数
	 * @param regex
	 *            定界正则表达式
	 * @return 字符串Map集合
	 */
	public static Map<String, String> splitToMap(String str, String regex) {
		String[] strarry = str.split(regex, 2);

		Map<String, String> strmap = new HashMap<String, String>();
		if (null != strarry && strarry.length > 1)
			strmap.put(strarry[0], strarry[1]);

		return strmap;
	}

	/**
	 * 根据给定的正则表达式匹配字符串
	 * 
	 * @param input
	 *            待匹配的字符串
	 * @param regex
	 *            正则表达式
	 * @param flags
	 *            正则表达式的flags
	 * @return 匹配的子字符串
	 */
	public static String matchString(String input, String regex, int flags) {
		Matcher matcher = Pattern.compile(regex, flags).matcher(input);
		while (matcher.find()) {
			return matcher.group();
		}
		return null;
	}

	/**
	 * 根据给定的正则表达式匹配字符串，不区分大小写
	 * 
	 * @param input
	 *            待匹配的字符串
	 * @param regex
	 *            正则表达式
	 * @return 匹配的子字符串
	 */
	public static String matchString(String input, String regex) {
		return matchString(input, regex, Pattern.CASE_INSENSITIVE);
	}

	/**
	 * 匹配指定的JSONP格式字符串中的JSON格式子字符串
	 * 
	 * @param jsonp
	 *            JSONP字符串
	 * @return JSON子字符串
	 */
	public static String matchJsonString(String jsonp) {
		return matchString(jsonp, "\\{[\\s\\S]*(?=\\))");
	}

	public static boolean isNull(String input) {
		return (null == input) ? true : false;
	}

	public static boolean isEmpty(String input) {
		Matcher matcher = Pattern.compile("\\s*").matcher(input);
		return matcher.matches();
	}

	public static boolean isNullOrEmpty(String input) {
		return isNull(input) || isEmpty(input);
	}

}
